package br.com.strings_serializacao;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

/**
 * Objetivo: Demonstrar serializacao basica, a interface Serializable e uma interface
 * chamada como marcadora e nao contem nenhum metodo.
 * @author Sidney
 *
 */
class Gato implements Serializable{
	String nome = "marley" ;
	//palavra chave transient faz com que o atributo nao seja serializado e o retorno
	//seja nulo por se tratar de uma referencia, se fosse um tipo primitivo receberia
	//o valor padrao.
	transient String raca = "poodle";	
	
	public void setNome(String n){
		n = nome;
	}
	public void setRaca(String raca){
		raca = this.raca;
	}
	public String getNome(){
		return nome;
	}
	public String getRaca(){
		return raca;
	}
	public String toString(){
		return "Nome: " + nome + " Raca: " + raca;
	}
}
public class ExemploSerializacao {
	public static void main(String[] args) {
		Gato cat = new Gato();
		cat.setNome("lili");
		cat.setRaca("Siames");
		cat.getNome();cat.getRaca();
		//bloco de codigo onde e realizada a serializacao
		try{
			FileOutputStream fs = new FileOutputStream("c://testecachorro.txt");
			ObjectOutputStream os = new ObjectOutputStream(fs);
			os.writeObject(cat);
			os.flush();
			os.close();
			System.out.println("Gravado");
		}catch(IOException e){e.printStackTrace();}
		//bloco de codigo onde e realizada a desserializacao
		try{
			FileInputStream fs = new FileInputStream("c://testecachorro.txt");
			ObjectInputStream oi = new ObjectInputStream(fs);
			cat = (Gato)oi.readObject();
			System.out.println(cat.toString());
			oi.close();
		}catch(Exception e){e.printStackTrace();}
	}

}
